﻿using Lonewolf.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lonewolf.Service
{
    public partial class AdminRoleService
    {
        public void SetRole(string userId, params string[] roleIds)
        {
            //1、用户需要重新设置的角色ID集合。
            var listNewRoleIds = roleIds.ToList();
            //2、此用户原有的角色信息
            var listOldRRs = Query().Where(p=>p.UserId==userId).ToList();
            //3、删除用户新设置和原有用户角色关系集合中相同的记录。
            for (int i = listOldRRs.Count - 1; i >= 0; i--)
            {
                if (listNewRoleIds.Contains(listOldRRs[i].UserId))
                {
                    listNewRoleIds.Remove(listOldRRs[i].RoleId);
                    listOldRRs.Remove(listOldRRs[i]);
                }
            }
            //4、新集合中剩下的用户角色关系新增到数据库
            listNewRoleIds.ForEach((roleId) =>
            {
                Insert(new AdminRole()
                {
                    UserId = userId,
                    RoleId = roleId
                });
            });
            //5、旧集合中剩下的用户角色关系从数据库中删除
            listOldRRs.ForEach((rrObj) =>
            {
                Delete(rrObj);
            });
        }

        public IQueryable<string> GetRoleIdsByUserId(string userId)
        {
            return QueryNoTracking().Where(a => a.UserId == userId).Select(b => b.RoleId);
        }
    }
}
